package com.company.genealogy.common.constant;

import lombok.Getter;

/**
 * API响应码枚举类
 * 统一管理后端接口的响应状态码及对应信息
 * code：业务状态码
 * msg：前端展示的提示信息
 * 
 * @author chenzhixiang
 */
@Getter
public enum ApiCodeEnum {
    /**
     * 操作成功
     */
    SUCCESS(0, "操作成功"),
    /**
     * 操作失败
     */
    FAIL(1, "操作失败"),

    /**
     * 未登录或token失效
     */
    UNAUTHORIZED(401, "未登录或token失效"),
    /**
     * 无权限
     */
    FORBIDDEN(403, "无权限"),
    /**
     * 资源不存在
     */
    NOT_FOUND(404, "资源不存在"),
    /**
     * 服务器异常
     */
    SERVER_ERROR(500, "服务器异常"),
    /**
     * 参数错误
     */
    PARAM_ERROR(1001, "参数错误"),
    /**
     * 点赞成功
     */
    LIKE_SUCCESS(2001, "点赞成功"),
    /**
     * 审核成功
     */
    AUDIT_SUCCESS(3001, "审核成功"),

    /**
     * 令牌无效
     */
    INVALID_TOKEN(4001, "令牌无效"),

    /**
     * 令牌已过期
     */
    TOKEN_EXPIRED(4002, "令牌已过期，请重新登录"),

    /**
     * 令牌已被注销
     */
    TOKEN_REVOKED(4003, "令牌已被注销"),

    /**
     * 刷新令牌无效
     */
    INVALID_REFRESH_TOKEN(4004, "刷新令牌无效"),

    /**
     * 登录失败
     */
    LOGIN_ERROR(5001, "登录失败"),

    /**
     * Token错误
     */
    TOKEN_ERROR(5002, "Token错误"),
    ;

    /**
     * 业务状态码
     */
    private final int code;
    /**
     * 提示信息
     */
    private final String msg;

    /**
     * 构造方法
     * @param code 业务状态码
     * @param msg 提示信息
     */
    ApiCodeEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

}